# sse_search_client.py
import asyncio
from mcp import ClientSession
from mcp.client.sse import sse_client

async def main():
    # 使用SSE传输而不是Stdio
    """
        外层 async with：管理进程和IO流的生命周期
        内层 async with：管理MCP会话的生命周期
        session：是 ClientSession 的实例，表示一个活跃的MCP协议会话，提供了与服务器通信的方法
    """
    async with sse_client("http://127.0.0.1:8000/sse") as (read, write):
        async with ClientSession(read, write) as session:
            # 初始化会话
            await session.initialize()
            print("会话初始化成功")

            # 调用工具
            print("调用RAG搜索...")
            rag_result = await session.call_tool(
                "generate_rag_output",
                {"query": "什么是机器学习？"}
            )
            print("RAG结果:", rag_result)

if __name__ == "__main__":
    print("要使用纯SSE模式启动服务端，命令如下：mcp.run(transport=\"sse\")。否则调用405 Method Not Allowed")
    asyncio.run(main())